package com.tang.sharding;

import com.tang.sharding.enums.ShardingCycle;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Tang
 * @classname ShardProperties
 * @description [  ]
 * @date 2021/7/31 9:25
 */
@Data
@ConfigurationProperties(prefix = "sharding")
public class ShardProperties {

    /**
     * 是否开启
     */
    private boolean enable = false;

    /**
     * 数据源名称
     */
    private String dataSourceName = "ds_0";

    /**
     * 表规则列表
     */
    List<TableRule> ruleList = new ArrayList<>(8);

    @Data
    public static class TableRule {
        /**
         * 逻辑表
         */
        private String logicTable;

        /**
         * 分片键
         */
        private String shardColumn;
        /**
         * 分片算法
         */
        private ShardingAlgorithm shardingAlgorithm;
        /**
         * 分片周期
         */
        private ShardingCycle shardingCycle;
        /**
         * 当 ShardingCycle 为 NON 时,需要指定这个属性，
         */
        private CustomCycle customCycle;
    }

    @Data
    public static class CustomCycle {
        /**
         * 代表不走插件生成节点表达式，原生方式设置数据节点
         */
        private String actualDataNodes;
        /**
         * cron表达式
         */
        private String cronExpression;
    }

    @Data
    public static class ShardingAlgorithm {

        /**
         * 精确
         */
        private String preciseAlgorithmClassName;

        /**
         * 范围
         */
        private String rangeAlgorithmClassName;
    }

}